<?php
class Sala extends AppModel {

	var $name = 'Sala';
	var $primaryKey = 'sala';
	var $validate = array(
		'sala' => array('numeric'),
		'tiposala_id' => array('numeric'),
		'nombre' => array(
			'isUnique' => array(
				'rule' => 'isUnique',
				'required' => true,
				'message' => 'El nombre de sala ya existe'),
			'notEmpty' => array(	
				'rule' => 'notEmpty',
				'required' => true,
				'message' => 'El nombre de sala no puede estar vacio')
			),
	);

	//The Associations below have been created with all possible keys, those that are not needed can be removed
	var $belongsTo = array(
		'Tiposala' => array(
			'className' => 'Tiposala',
			'foreignKey' => 'tiposala_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'Owner' => array(
			'className' => 'User',
			'foreignKey' => 'user_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		)/*,
		'Torneo' => array(
			'className' => 'Torneo',
			'foreignKey' => 'torneo_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		)*/
	);

	var $hasMany = array(
		'Partido' => array(
			'className' => 'Partido',
			'foreignKey' => 'sala_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		)
	);

	/*var $hasAndBelongsToMany = array(
		'User' => array(
			'className' => 'User',
			'joinTable' => 'salas_users',
			'foreignKey' => 'sala_id',
			'associationForeignKey' => 'user_id',
			'unique' => true,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'finderQuery' => '',
			'deleteQuery' => '',
			'insertQuery' => ''
		)
	);*/
	
	function listarSalas($numero)
	{
		$salas=$this->find('all', array('fields'=>'Sala.nombre',
				'conditions'=>array('Sala.tiposala_id ='=> $numero, 'Sala.estado' => 'Disponible'),'limit'=>5));
		//print_r($salas);
		return $salas;
		//$ret = $this->query("SELECT * FROM salas");
		//echo var_dump($ret);
		//$firstSala = $ret[0]['nombre'];
		//return $firstSala;
	}
	
	function listarSalasPublicas()
	{
		$salas=$this->find('all', array('fields'=>'Sala.nombre','conditions'=>array('Sala.tiposala_id >'=> 2),'limit'=>5));
		return $salas;
	}
	
	/* RETURN:
	  - 0 no puede ingresar
	  - 1 puede ingresar
	*/
	function fueInvitado($idUsuario = null, $idSala = null){
		$invitado = ClassRegistry::init('Mensaje')->find('first', array(
					'conditions' => array(
						'Mensaje.destino' => $idUsuario, 
						'Mensaje.localidad' => $idSala
					)
		));
		
		$dueño = ClassRegistry::init('Sala')->find('first', array(
					'conditions' => array(
						'Sala.sala' => $idSala,
						'Sala.user_id' => $idUsuario
					)
		));
		
		if(empty($invitado) && empty($dueño))
			return false;
		
		return true;
		
	}
	
	/* RETURN:
	  - 0 no puede ingresar
	  - 1 puede ingresar
	*/
	function controlarCantidadUsuarios($salaId = null, $grupoId = null, $puntos = 0){
		$sala=$this->read(null, $salaId);
		//print_r($sala);
		//si esta logueado
		if($sala['Tiposala']['tiposala']==1){ // Sala Amistoso
			//Si la cantidad de usuarios no llego a la cantidad max de usuarios
			if($sala['Sala']['cantmaxusuarios']>$sala['Sala']['cantusuarios']){
				return 1; //como jugador
			}
			return 0; //NO puede ingresar. Ya no hay lugar		
		}
		elseif($sala['Tiposala']['tiposala']==2){ //sala privada
			//si tiene una invitacion del dueño de la sala
			//y si acepto
			if($sala['Sala']['cantmaxusuarios']>$sala['Sala']['cantusuarios']){
				return 1; //como jugador
			}
			return 0; //no puede ingresar
		}
		elseif($sala['Tiposala']['tiposala']>2){ //sala publica
			if($grupoId < 3){ // si el usuario Es por lo menos Premium
				if($puntos >= $sala['Tiposala']['puntosminnivel']){//si posee el suficiente punto minimo
					return 1; //puede entrar como jugador
				}else{
					return 0; //Solo como observador
				}
			}
			return 0;
		}
	}
	
	function topPorcentajeWinners($tipo=1){
		if($tipo==1){
			return $this->find('all', array('conditions'=>array('Sala.estado ='=>'Disponible'),'order' => array('Sala.cantpartidos DESC'),'limit' => 10));
		}elseif($tipo==2){
			return $this->find('all', array('conditions'=>array('Sala.estado ='=>'Disponible'),'order' => array('Sala.cantusuarios DESC'),'limit' => 10));
		}
	}

}
?>